#include <iostream>
#include <stdlib.h>
using namespace std;
#include "SymboleValue.h"

////////////////////////////////////////////////////////////////////////////////

SymboleValue::SymboleValue(Symbole s) :
Symbole(s.getChaine()) {
    if (s == "<ENTIER>") {
        valeur = atoi(s.getChaine().c_str()); // c_str convertit une string en char*
        defini = true;
    } else {
        valeur = 0;
        defini = false;
    }
}

////////////////////////////////////////////////////////////////////////////////

void SymboleValue::afficher(unsigned short indentation) {
    Noeud::afficher(indentation);
    cout << "Feuille - Symbole value : " << getChaine() << endl; // on affiche la chaine du symbole
}

////////////////////////////////////////////////////////////////////////////////
// Attention : cette fonction (operator) n'est pas membre de la classe SymboleValue

ostream & operator <<(ostream & cout, SymboleValue symb) {
    cout << (Symbole) symb << "\t\t - Valeur=";
    if (symb.defini)
        cout << symb.valeur << " ";
    else
        cout << "indefinie ";
    return cout;
}

void SymboleValue::genCode(ostream &f, unsigned short indentation) {
    Noeud::genCode(f, indentation);
    if (*this == "<CHAINE>") {
        string s = getChaine();
        for (unsigned int i=0; i<s.length(); i++)
            if (s[i]=='\n')
                f << "\\n";
            else
                f << s[i];
    } else
        f << getChaine();
}